本系列文之後也會置於個人網站
之前已經看到我一些使用scope的地方:


接著要來看看是打哪來?在哪設定的?
首先在Realm的Configure下有一個Client Scopes。其中有定義我們已經使用過的profile、email、role。另外可以注意到使用到Protocol都是openid-connect,但本系列也不會提到另外一個--saml,所以差異上基本不必理會。

上面定義好的Client Scopes後,不代表Client就可以使用了。
還需要在Client的Client Scopes頁籤設定可以使用的Scope。預設上會有一些,也就是其實Keycloak在收到不包含scope請求後,也同樣會送出的部分。剩下的就是可以選擇的部分。

在未建立好新的Client Scope前,先使用OAuth.Tools看看會發生什麼事情:

當我們要求x這個scope,卻會得到一個錯誤表示不被允許。
x接著可以很簡單的建立一個名爲x的Client Scope。


但此時,在進行一次要求,仍然會得到相同錯誤。
oauth_tools client使用x scope需要將client scope -- x添加到oauth_tools下可以使用的scope(Optional Client Scopes)。

這次就可以成功取回存取權杖。還可以在存取權杖分析內的scope看到x。

最後是Claim的概念。這個與JWT格式的Token有關,本系列之後還會再提到JWT,現在就不再多做展開。
前面說過OAuth並沒有定義Token需要使用的格式,但是資源伺服器在做存取控制時,必須理解Token,那勢必需要一種解釋Token的辦法。而claims是在JWT這種Token格式下,建議解析後的每一個欄位,像是iss、sub、exp,以及scope、email、website、name等等都是一個個聲明(claims)。

此外,Keycloak還有一處使用到了Scope這個字,但作用上與上面有些不同。用於資源(resource)上,與授權(Authorization)和存取控制(Access Token)相關。

在之後,會將資源+操作視爲一個permission。像是針對某個檔案(資源),可以進行寫入(操作)。也就組成一個權限(permission)--file:write。這樣的設計並不是唯一,也可能是反過來的。可以看看另一套系統的權限設計:Alerta的權限是read:alerts和write:alerts。最終仍會回到資源伺服器如何解釋。

同樣地,這部分在之後還會有相關內容,還請期待。